Skip to main content

Énumération

Une énumération est un type de données défini par l'utilisateur composé d'une liste de membres séparés par des virgules (valeurs d'énumération) permettant de déclarer des variables définies par l'utilisateur.

Vous déclarez une énumération dans DUT objet, que vous avez déjà créé dans le projet en cliquant Ajouter un objet.

Dans le code de l'application, vous pouvez utiliser les membres d'énumération comme des constantes dont l'identifiant <enumeration name>.<member name> est reconnu globalement dans le projet.

Pour plus d'informations, voir : DUT

Déclaration

Syntaxe

{attribute 'strict'}

TYPE <enumeration name> :

(

    <member name> := <value>

) <base data type> := <initialization> ;

END_TYPE

{attribute 'strict'}

Facultatif

Le pragma a pour effet d'effectuer un test de type strict comme décrit ci-dessous.

Le pragma est facultatif, mais recommandé.

<enumeration name>

Nom de l'énumération qui peut être utilisée dans le code comme type de données

Exemple : COLOR_BASIC

    <member name> := <initial value>

N'importe quel nombre de membres, mais au moins deux membres

Une énumération est une liste de noms de membres séparés par des virgules entre crochets. Le dernier membre avant le crochet fermant n'a pas besoin de virgule. Tous les membres ont le même type de données.

Les valeurs des membres sont automatiquement initialisées : à partir de 0, les valeurs sont continuellement incrémentées de 1. Vous pouvez également attribuer explicitement une valeur initiale fixe aux membres individuels.

Exemple : yellow := 1

<base data type>

Facultatif

Vous pouvez attribuer explicitement l'un des types de données de base suivants :

INT | UINT | SINT | USINT | DINT | UDINT | LINT | ULINT | BYTE | WORD | DWORD | LWORD

Par défaut : INT

:= <initialization>

Facultatif

L'un des membres peut être explicitement déclaré comme membre initial.

Par défaut : si aucune initialisation n'est explicitement spécifiée, l'initialisation est automatiquement effectuée avec le membre supérieur.

Exemple 227. Exemple
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE COLOR_BASIC :
(
    yellow,
    green,
    blue,
    black
) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow
;
END_TYPE


Énumération avec type de données de base explicite

Extensions de la norme IEC 61131-3

Le type de données de base pour une déclaration d'énumération est INT par défaut. Cependant, vous pouvez également déclarer des énumérations qui sont basées explicitement sur un autre type de données entier.

Exemple 228. Exemple

Énumération avec type de données de base DWORD

TYPE COLOR :
(
        white := 16#FFFFFF00,
        yellow := 16#FFFFFF00,
        green := 16#FF00FF00,
        blue := 16#FF0000FF,
        black := 16#88000000
) DWORD := black
; // Basic data type is DWORD, default initialization for all COLOR variables is black
END_TYPE


Règles de programmation strictes

Important

Dans CODESYS V3.5 SP7 et versions supérieures, le pragma {attribute 'strict'} est ajouté automatiquement dans la première ligne lors de la déclaration d'une énumération.

Les règles de programmation strictes sont activées lors de l'ajout du pragma {attribute 'strict'}.

. Le code suivant est considéré comme une erreur de compilation :
  • Opérations arithmétiques avec des membres d'énumération

    Par exemple, une variable d'énumération ne peut pas être utilisée comme variable de compteur dans un FOR boucle.

  • Affectation d'une valeur constante, qui ne correspond pas à une valeur d'énumération, à un membre de l'énumération

  • Affectation d'une variable non constante, qui possède un autre type de données que l'énumération, à un membre de l'énumération

Les opérations arithmétiques peuvent entraîner l'attribution de valeurs non déclarées aux membres de l'énumération. Un meilleur style de programmation est d'utiliser SWITCH/CASE instructions pour le traitement des valeurs des membres.

Déclaration et initialisation des variables d'énumération

Syntaxe

<variable name> : <enumeration name> := <initialization> ;

Dans le cas d'une déclaration d'une variable d'énumération avec une énumération définie par l'utilisateur, la variable peut être initialisée avec un membre d'énumération.

Exemple 229. Exemple
PROGRAM PLC_PRG
VAR
    colorCar: COLOR;
    colorTaxi : COLOR := COLOR.yellow;
END_VAR

La variable colorCar est initialisé avec COLOR.black. Il s'agit de l'initialisation par défaut pour toutes les variables d'énumération COLOR et défini de cette façon dans la déclaration de type. La variable colorTaxi possède sa propre initialisation.



Si aucune initialisation n'est spécifiée, la valeur d'initialisation est 0.

Exemple 230. Exemple
PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    cbTree: COLOR_BASIC := COLOR_BASIC.green;
END_VAR

La variable cbFlower est initialisé avec COLOR_BASIC.yellow. Il s'agit de l'initialisation par défaut pour toutes les variables d'énumération COLOR_BASIC. Comme la déclaration d'énumération ne spécifie pas de membre à initialiser, le système s'initialise automatiquement avec le membre dont la valeur est 0. Il s'agit généralement du premier des membres de l'énumération. Cependant, il peut également s'agir d'un autre membre qui n'est pas en première position, mais qui est explicitement initialisé avec 0.

La variable cbTree possède une initialisation explicite.



Si aucune valeur n'est spécifiée à la fois pour le type et pour la variable, la règle suivante s'applique : Si une énumération contient une valeur pour 0, cette valeur est l'initialisation par défaut, sinon, le premier membre de la liste.

Exemple 231. Exemple

Initialisation avec le membre 0

TYPE ENUM :
(
    e1 := 2,
    e2 := 0,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e : ENUM;
END_VAR

La variable e est initialisé avec ENUM.e2.

Initialisation avec le premier membre

TYPE ENUM2 :
(
    e1 := 3,
    e2 := 1,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e2 : ENUM2;
END_VAR

La variable e2 est initialisé avec ENUM.e1.



Accès unique aux membres du recensement

Extensions de la norme IEC 61131-3

Les membres d'énumération peuvent également être utilisés comme variables constantes avec l'identifian <enumeration name>.<member name>.  Les membres d'énumération sont reconnus globalement dans le projet et leur accès est unique. Par conséquent, un nom de membre peut être utilisé dans différentes énumérations.

Exemple 232. Exemple

Membre : blue

PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    colorCar : COLOR;
END_VAR

(* unambiguous identifiers although the component names are identical *)
cbFlower := COLOR_BASIC.blue;
colorCar := COLOR.blue;

(* invalid code *)
cbFlower := blue;
colorCar := blue;


Pour plus d'informations, voir : Espace de noms d'énumération.